package com.heihei.demo03;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class LongestSubstring {
    public static void main(String[] args) {

    }

    /**
     * 方法描述: 无重复字符的最长子串（尚未研究清楚）
     * 执行用时： 2ms    击败 100%
     * 内存消耗：38.8MB   击败 27.42%
     *
     * @param s 
     * @Return {@link int}
     * @throws 
     * @author duanhengfei
     * @date 2021年03月02日 08:47:35
     */
    public int lengthOfLongestSubstring(String s) {
        //记录字符上一次出现的位置
        int[] last = new int[128];
        for (int i = 0; i < 128; i++) {
            last[i] = -1;
        }
        int res = 0;
        //窗口开始的位置
        int start = 0;
        for (int i = 0; i < s.length(); i++) {
            int index = s.charAt(i);
            start = Math.max(start, last[index] + 1);
            res = Math.max(res, i - start + 1);
            last[index] = i;
        }
        return res;
    }
}